#ifndef __LINKQUEUE_H__
#define __LINKQUEUE_H__
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>
#include <string.h>

// 链表的节点
typedef struct node
{
    int data;
    struct node *next;
}node, *list;

// 队列的管理结构体
typedef struct
{
                   //  front                 rear
                   //   ↓                     ↓ 
    list front;    //   囗 --> 囗 --> 囗  --> 囗  --> NULL
    list rear;
    int size; // 队列元素总数
}queue;

// API
queue *init_queue(void);
bool en_queue(queue *q, list newnode);
bool out_queue(queue *q, list *p);
list new_node(int data);
bool front_queue(queue *q, list *p); // 取队头元素
bool is_empty(queue *q);
void destroy_init(queue *q); // 将队列恢复初始状态
void destroy(queue *q);
void show(queue *q);

#endif